package pfc.aviloc.aplicacion.datos_personales;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import pfc.aviloc.R;
import android.content.Context;


public class DatosPersonalesParseador extends DefaultHandler {
	
	DatosPersonales datosPersonales;
	boolean error;
	String tipoError;
	Context context;
	int etiqueta;
	
	public DatosPersonalesParseador(Context context) {
		this.context = context;
	}

	public DatosPersonales getDatosPersonales(InputSource xml){
		datosPersonales = null;
		error=false;
		tipoError = context.getString(R.string.dp_parseador_error_sin_errores);
		try {
			// Se utiliza SAX para parsear.
			SAXParserFactory spf = SAXParserFactory.newInstance();
			// spf.setValidating(true);
			//spf.setNamespaceAware(true);
			// spf.setFeature("http://xml.org/sax/features/validation" , true);			
			SAXParser sp = spf.newSAXParser();			
			XMLReader xr = sp.getXMLReader();
			xr.setContentHandler(this);
			// Se realiza el parseo.			
			xr.parse(xml);
		} catch (IOException e) {
			error=true;
			tipoError = context.getString(R.string.dp_parseador_error_error_de_parseo);
			datosPersonales=null;
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			error=true;
			tipoError = context.getString(R.string.dp_parseador_error_error_de_parseo);
			datosPersonales=null;			
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			error=true;
			tipoError = context.getString(R.string.dp_parseador_error_error_de_parseo);
			datosPersonales=null;
			// TODO Auto-generated catch block
			e.printStackTrace();
		}        
        
		return datosPersonales;
	}
	
	// METODOS PROPIOS DEL DefaultHandler
//	@Override
//	public void startDocument() throws SAXException {
//		//super.startDocument();
//		Log.i("INFO","-->ENTRAMOS EN StartDocument()");				
//	}
//	
//	@Override
//	public void endDocument() throws SAXException {
//		//endDocument();
//		Log.i("INFO","-->ENTRAMOS EN endDocument()");		
//	}
	
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		//super.startElement(uri, localName, qName, attributes);
		//Log.i("INFO","---->ENTRAMOS EN startElement()");
		//Log.i("INFO","-------> uri="+uri+"; localName="+localName+"; qName="+qName+"; Attributes="+attributes+";");
		
		// Entramos en etiqueta <datospersonales>
		if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_datos_personales))) {
			etiqueta=R.string.dp_parseador_etiqueta_datos_personales;
			datosPersonales = new DatosPersonales();
		}
		// Entramos en etiqueta <dni>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_dni))) {
			etiqueta=R.string.dp_parseador_etiqueta_dni;
		}
		// Entramos en etiqueta <idusuario>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_id_usuario))) {
			etiqueta=R.string.dp_parseador_etiqueta_id_usuario;
		}
		// Entramos en etiqueta <tipo>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_tipo))) {
			etiqueta=R.string.dp_parseador_etiqueta_tipo;
		}
		// Entramos en etiqueta <password>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_password))) {
			etiqueta=R.string.dp_parseador_etiqueta_password;
		}
		// Entramos en etiqueta <nombre>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_nombre))) {
			etiqueta=R.string.dp_parseador_etiqueta_nombre;
		}
		// Entramos en etiqueta <apellido1>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_apellido1))) {
			etiqueta=R.string.dp_parseador_etiqueta_apellido1;
		}
		// Entramos en etiqueta <apellido2>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_apellido2))) {
			etiqueta=R.string.dp_parseador_etiqueta_apellido2;
		}
		// Entramos en etiqueta <telefono>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_telefono))) {
			etiqueta=R.string.dp_parseador_etiqueta_telefono;
		}
		// Entramos en etiqueta <movil>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_movil))) {
			etiqueta=R.string.dp_parseador_etiqueta_movil;
		}
		// Entramos en etiqueta <mail>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_mail))) {
			etiqueta=R.string.dp_parseador_etiqueta_mail;
		}		
		// Entramos en etiqueta <sexo>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_sexo))) {
			etiqueta=R.string.dp_parseador_etiqueta_sexo;
		}
		// Entramos en etiqueta <fechanacimiento>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_fecha_nacimiento))) {
			etiqueta=R.string.dp_parseador_etiqueta_fecha_nacimiento;
		}
		// Entramos en etiqueta <direccion>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_direccion))) {
			etiqueta=R.string.dp_parseador_etiqueta_direccion;
		}
		// Entramos en etiqueta <localidad>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_localidad))) {
			etiqueta=R.string.dp_parseador_etiqueta_localidad;
		}
		// Entramos en etiqueta <provincia>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_provincia))) {
			etiqueta=R.string.dp_parseador_etiqueta_provincia;
		}
		// Entramos en etiqueta <foto>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_foto))) {
			etiqueta=R.string.dp_parseador_etiqueta_foto;
		}
		// Entramos en etiqueta <error>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_error))) {
			etiqueta=R.string.dp_parseador_etiqueta_error;
		}
		// Entramos en etiqueta <tipoerror>
		else if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_tipo_error))) {
			etiqueta=R.string.dp_parseador_etiqueta_tipo_error;
		}

	}
	
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		//super.characters(ch, start, length);
		//Log.i("INFO","---->ENTRAMOS EN characters()");
		String cadena = new String(ch, start, length);
		//Log.i("INFO","-------> ch="+cadena+"; start="+start+"; length="+length+";");
		
		switch (etiqueta){
//		  case R.string.dp_parseador_etiqueta_datos_personales:
//			  break;
		  case R.string.dp_parseador_etiqueta_dni:
			  datosPersonales.setDni(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_id_usuario:
			  datosPersonales.setIdPaciente(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_tipo:
			  datosPersonales.setTipoUsuario(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_password:
			  datosPersonales.setPassword(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_nombre:
			  datosPersonales.setNombre(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_apellido1:
			  datosPersonales.setApellido1(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_apellido2:
			  datosPersonales.setApellido2(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_telefono:
			  datosPersonales.setTelefono(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_movil:
			  datosPersonales.setMovil(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_mail:
			  datosPersonales.setMail(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_sexo:
			  datosPersonales.setSexo(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_fecha_nacimiento:
			  datosPersonales.setFechaNacimiento(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_direccion:
			  datosPersonales.setDireccion(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_localidad:
			  datosPersonales.setLocalidad(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_provincia:
			  datosPersonales.setProvincia(cadena);
			  break;
		  case R.string.dp_parseador_etiqueta_foto:
			  // TODO insertar foto algun dia
			  break;
		  case R.string.dp_parseador_etiqueta_error:
			  if (cadena.equalsIgnoreCase(context.getString(R.string.dp_parseador_respuesta_true))) {
				error = true;  
			  } else if (cadena.equalsIgnoreCase(context.getString(R.string.dp_parseador_respuesta_false))){
				error = false;			  
			  } else {
				tipoError =context.getString(R.string.dp_parseador_error_de_datos_etiqueta_error);
			  }
			  break;
		  case R.string.dp_parseador_etiqueta_tipo_error:
			  if (error){
				  tipoError=cadena;
			  }
			  break;
//		  default:
//			  //NADA
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		//super.endElement(uri, localName, qName);
		//Log.i("INFO","---->ENTRAMOS EN endElement()");
		//Log.i("INFO","-------> uri="+uri+"; localName="+localName+"; qName="+qName+";");
		// Entramos en etiqueta <datospersonales>
		if (localName.equals(context.getString(R.string.dp_parseador_etiqueta_datos_personales))) {
			if (error){
				datosPersonales = null;
			}			
		} else {
			etiqueta = -1;
		}			
	}

}
